#include <bits/stdc++.h>
using namespace std;
int c[20], cab[20], n, w, ans;
/**
 * 已经租用 cnt 辆车，现在送第 now 只猫
 * @param now 现在送的猫的标号
 * @param cnt 已租用车数
 */
void dfs(int now, int cnt) {
  if (cnt >= ans) return;
  if (now == n + 1) {  // 已经完成运输
    ans = min(ans, cnt);
    return;
  }
  // 不必多租一辆车，分配到已租用缆车
  for (int i = 1; i <= cnt; ++i) {
    if (cab[i] + c[now] <= w) {  // 能装下
      cab[i] += c[now];
      dfs(now + 1, cnt);
      cab[i] -= c[now];  // 回溯
    }
  }
  // 需要多租一辆车
  cab[cnt + 1] = c[now];
  dfs(now + 1, cnt + 1);
  cab[cnt + 1] = 0;  // 回溯
}
signed main() {
  cin >> n >> w;
  for (int i = 1; i <= n; ++i) cin >> c[i];
  sort(c + 1, c + n + 1, greater<>());
  ans = n;
  dfs(1, 0);
  cout << ans << endl;
}
